package br.ufc.Bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import br.ufc.DAO.Implements.AlunoDAO;
import br.ufc.DAO.Implements.AlunoDisciplinaDAO;
import br.ufc.DAO.Implements.CursoDAO;
import br.ufc.DAO.Implements.DisciplinaDAO;
import br.ufc.DAO.Implements.TurmaDAO;
import br.ufc.si.model.Aluno;
import br.ufc.si.model.AlunoDisciplina;
import br.ufc.si.model.Curso;
import br.ufc.si.model.Disciplina;
import br.ufc.si.model.Turma;

public class AlunoBean {

	private Aluno aluno = new Aluno();
	private int aux[] = new int[100];
	private int codigo_turma = 0;
	private int codigo_curso = 0;

	private DisciplinaDAO disciplinaDao;
	private AlunoDAO alunoDao;
	private TurmaDAO turmaDao;
	private CursoDAO cursoDao;

	private List<Aluno> alunos;
	private List<Disciplina> disciplinas;
	private List<SelectItem> disciplinas_selecao;
	private List<Curso> cursos;
	private List<SelectItem> cursos_selecao;
	private List<Turma> turmas;
	private List<SelectItem> turmas_selecao;

	public AlunoBean() {

		disciplinaDao = new DisciplinaDAO();
		alunoDao = new AlunoDAO();
		turmaDao = new TurmaDAO();
		cursoDao = new CursoDAO();

		disciplinas = new ArrayList<Disciplina>();
		disciplinas_selecao = new ArrayList<SelectItem>();

		cursos = new ArrayList<Curso>();
		cursos_selecao = new ArrayList<SelectItem>();
		cursos = cursoDao.listALL();

		turmas = new ArrayList<Turma>();
		turmas_selecao = new ArrayList<SelectItem>();
		turmas = turmaDao.ListAll();

		for (Curso c : cursos) {
			cursos_selecao.add(new SelectItem(c.getCodigo(), c.getNome()));
		}

		for (Turma t : turmas) {
			turmas_selecao.add(new SelectItem(t.getCodigo(), t.getSemestre()));
		}

	}

	public String cadastrarDisciplinaAluno() {

		for (int i = 0; i < aux.length; i++) {

			Disciplina d = new Disciplina();
			d = disciplinaDao.listDisciplinaByCodigo(aux[i]);

			if (d.getNumeroDeVagas() != 0) {

				AlunoDisciplinaDAO dao = new AlunoDisciplinaDAO();
				AlunoDisciplina a = new AlunoDisciplina();
				a.setAluno(aluno);
				a.setDisciplina(d);
				dao.save(a);
				d.setNumeroDeVagas(d.getNumeroDeVagas() - 1);
				disciplinaDao.update(d);
			}

		}

		return "oi";
	}

	public String cadastrarAluno() {

		disciplinas = disciplinaDao.listAllDisciplinasByCodigo(codigo_curso);

		for (Disciplina d : disciplinas) {
			disciplinas_selecao.add(new SelectItem(d.getCodigo(), d.getNome()));
		}

		TurmaDAO t = new TurmaDAO();
		CursoDAO c = new CursoDAO();

		aluno.setCurso(c.listCursoById(codigo_curso));
		aluno.setTurma(t.listTurmaById(codigo_turma));
		aluno.setStatus("matriculado");

		alunoDao.save(aluno);

		return "cadastrardisciplina";

	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public int[] getAux() {
		return aux;
	}

	public void setAux(int[] aux) {
		this.aux = aux;
	}

	public int getCodigo_turma() {
		return codigo_turma;
	}

	public void setCodigo_turma(int codigo_turma) {
		this.codigo_turma = codigo_turma;
	}

	public int getCodigo_curso() {
		return codigo_curso;
	}

	public void setCodigo_curso(int codigo_curso) {
		this.codigo_curso = codigo_curso;
	}

	public DisciplinaDAO getDisciplinaDao() {
		return disciplinaDao;
	}

	public void setDisciplinaDao(DisciplinaDAO disciplinaDao) {
		this.disciplinaDao = disciplinaDao;
	}

	public AlunoDAO getAlunoDao() {
		return alunoDao;
	}

	public void setAlunoDao(AlunoDAO alunoDao) {
		this.alunoDao = alunoDao;
	}

	public TurmaDAO getTurmaDao() {
		return turmaDao;
	}

	public void setTurmaDao(TurmaDAO turmaDao) {
		this.turmaDao = turmaDao;
	}

	public CursoDAO getCursoDao() {
		return cursoDao;
	}

	public void setCursoDao(CursoDAO cursoDao) {
		this.cursoDao = cursoDao;
	}

	public List<Aluno> getAlunos() {
		return alunos;
	}

	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}

	public List<Disciplina> getDisciplinas() {
		return disciplinas;
	}

	public void setDisciplinas(List<Disciplina> disciplinas) {
		this.disciplinas = disciplinas;
	}

	public List<SelectItem> getDisciplinas_selecao() {
		return disciplinas_selecao;
	}

	public void setDisciplinas_selecao(List<SelectItem> disciplinas_selecao) {
		this.disciplinas_selecao = disciplinas_selecao;
	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public List<SelectItem> getCursos_selecao() {
		return cursos_selecao;
	}

	public void setCursos_selecao(List<SelectItem> cursos_selecao) {
		this.cursos_selecao = cursos_selecao;
	}

	public List<Turma> getTurmas() {
		return turmas;
	}

	public void setTurmas(List<Turma> turmas) {
		this.turmas = turmas;
	}

	public List<SelectItem> getTurmas_selecao() {
		return turmas_selecao;
	}

	public void setTurmas_selecao(List<SelectItem> turmas_selecao) {
		this.turmas_selecao = turmas_selecao;
	}

}
